Custom Classes এবং Collections এ LINQ প্রয়োগ

Microsoft Technologies - লিংক (LinQ) LINQ শিখে প্রজেক্ট তৈরি (Building Projects with LINQ) |
166
166

LINQ (Language Integrated Query) এর সাহায্যে আপনি সহজেই Custom Classes এবং Collections এ ডেটা ম্যানিপুলেট, ফিল্টার এবং প্রসেস করতে পারেন। LINQ সাধারণত IEnumerable বা IQueryable টাইপের ডেটা কাঠামোতে কাজ করে, এবং এর মাধ্যমে আপনি যে কোনো Collection বা Custom Class এর উপর কুয়েরি অপারেশন চালাতে পারেন, যদি তারা এই ইন্টারফেসগুলি ইমপ্লিমেন্ট করে।

এই টিউটোরিয়ালে, আমরা Custom Classes এবং Collections এর উপর LINQ কীভাবে প্রয়োগ করা হয় তা দেখব।


Custom Classes তৈরি করা

প্রথমে, আমরা একটি Custom Class তৈরি করব এবং তারপর LINQ এর সাহায্যে তার উপর বিভিন্ন কুয়েরি প্রয়োগ করব।

ধরা যাক, আমাদের একটি Employee ক্লাস রয়েছে, যেখানে ID, Name, Age, এবং Salary প্রোপার্টি রয়েছে।

using System;
using System.Collections.Generic;
using System.Linq;

class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public double Salary { get; set; }
}

LINQ দিয়ে Custom Class এর উপর কুয়েরি

আমরা একটি List তৈরি করব এবং তার উপর LINQ ব্যবহার করে বিভিন্ন অপারেশন প্রয়োগ করব।

উদাহরণ: LINQ দিয়ে Custom Class এর ডেটা ফিল্টার করা

using System;
using System.Collections.Generic;
using System.Linq;

class Employee
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public double Salary { get; set; }
}

class Program
{
    static void Main()
    {
        // Custom class এর একটি List তৈরি
        List<Employee> employees = new List<Employee>
        {
            new Employee { ID = 1, Name = "Alice", Age = 30, Salary = 50000 },
            new Employee { ID = 2, Name = "Bob", Age = 35, Salary = 60000 },
            new Employee { ID = 3, Name = "Charlie", Age = 40, Salary = 70000 },
            new Employee { ID = 4, Name = "David", Age = 25, Salary = 45000 }
        };

        // LINQ কুয়েরি প্রয়োগ
        var highEarners = from e in employees
                          where e.Salary > 50000
                          select e;

        // ফলাফল প্রদর্শন
        foreach (var employee in highEarners)
        {
            Console.WriteLine($"{employee.Name} earns {employee.Salary}");
        }
    }
}

আউটপুট:

Bob earns 60000
Charlie earns 70000

এখানে, আমরা Salary এর ভিত্তিতে filter করেছি এবং Where শর্ত ব্যবহার করেছি। LINQ ব্যবহার করে সহজেই Employee ক্লাসের উপর কুয়েরি করা হয়েছে।


LINQ ব্যবহার করে Collections এর উপর কুয়েরি

এখন, আমরা দেখব কিভাবে Collections (যেমন, List<T>, Dictionary<K, V>, Queue<T>, Stack<T>) এর উপর LINQ প্রয়োগ করা যায়।

উদাহরণ ১: List<T> এর উপর LINQ কুয়েরি

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 10, 20, 30, 40, 50, 60, 70 };

        // LINQ কুয়েরি: সংখ্যাগুলোর মধ্যে যেগুলো 30 এর বড়
        var filteredNumbers = from n in numbers
                              where n > 30
                              select n;

        // ফলাফল প্রদর্শন
        foreach (var number in filteredNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

আউটপুট:

40
50
60
70

এখানে, আমরা List এর উপর LINQ কুয়েরি প্রয়োগ করেছি, যেখানে Where শর্ত ব্যবহার করে 30 এর বেশি সংখ্যাগুলি ফিল্টার করা হয়েছে।

উদাহরণ ২: Dictionary<K, V> এর উপর LINQ কুয়েরি

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        Dictionary<int, string> students = new Dictionary<int, string>
        {
            { 1, "Alice" },
            { 2, "Bob" },
            { 3, "Charlie" },
            { 4, "David" }
        };

        // LINQ কুয়েরি: ID অনুযায়ী নামের তালিকা পাওয়া
        var studentNames = from s in students
                           where s.Key % 2 == 0
                           select s.Value;

        // ফলাফল প্রদর্শন
        foreach (var name in studentNames)
        {
            Console.WriteLine(name);
        }
    }
}

আউটপুট:

Bob
David

এখানে, আমরা Dictionary<int, string> এর উপর LINQ কুয়েরি ব্যবহার করেছি এবং Key এর ভিত্তিতে filtering করেছি।

উদাহরণ ৩: Queue<T> এর উপর LINQ কুয়েরি

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        Queue<string> queue = new Queue<string>();
        queue.Enqueue("Alice");
        queue.Enqueue("Bob");
        queue.Enqueue("Charlie");
        queue.Enqueue("David");

        // LINQ কুয়েরি: Queue তে থাকা নামগুলোর মধ্যে যেগুলো "B" দিয়ে শুরু
        var filteredQueue = from name in queue
                            where name.StartsWith("B")
                            select name;

        // ফলাফল প্রদর্শন
        foreach (var name in filteredQueue)
        {
            Console.WriteLine(name);
        }
    }
}

আউটপুট:

Bob

এখানে Queue এর উপর LINQ কুয়েরি প্রয়োগ করা হয়েছে এবং StartsWith মেথড ব্যবহার করে নির্দিষ্ট কন্ডিশন অনুযায়ী ফিল্টার করা হয়েছে।


LINQ ব্যবহার করার সময় কিছু গুরুত্বপূর্ণ টিপস

  1. Deferred Execution (লেজি এক্সিকিউশন): LINQ কুয়েরি যখন IEnumerable বা IQueryable রিটার্ন করে, তখন এটি deferred execution এর মাধ্যমে কেবল তখনই এক্সিকিউট হয় যখন ডেটার উপর অ্যাক্সেস করা হয়।
  2. Eager Execution: যদি আপনি ডেটা একত্রিত করার সাথে সাথেই তার ফলাফল দেখতে চান, তবে ToList(), ToArray(), বা ToDictionary() ব্যবহার করুন।
  3. Performance: LINQ অত্যন্ত শক্তিশালী হলেও, বড় ডেটাসেটের জন্য optimization প্রয়োজন। বিশেষত, Where, Select, OrderBy ইত্যাদি মেথডগুলো একাধিক বার ব্যবহার করা হলে পারফরম্যান্সে নেতিবাচক প্রভাব পড়তে পারে।
  4. Anonymous Types: LINQ কুয়েরি দিয়ে আপনি Anonymous Types তৈরি করতে পারেন যা নতুন ক্লাস ডিফাইন করা ছাড়াই ডেটা ধারণ করতে সাহায্য করে।

LINQ এর সাহায্যে আপনি Custom Classes এবং Collections এর উপর খুবই সহজে এবং কার্যকরীভাবে ডেটা ম্যানিপুলেট করতে পারেন। LINQ এর সুবিধা হলো এটি কোডকে আরও পরিষ্কার, রিডেবল এবং সংক্ষিপ্ত করে, পাশাপাশি ডেটার সাথে কাজ করার সময় পারফরম্যান্স অপটিমাইজেশনও করতে পারে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion